package com.meilai.project.service.system;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meilai.project.dto.system.*;
import com.meilai.project.entity.system.User;
import com.meilai.project.entity.system.UserWX;
import com.meilai.project.vo.system.UserVO;
import com.meilai.project.vo.system.WebDepartmentForChooseVO;
import com.meilai.project.vo.system.WebUserVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author yxg
 * @date 2020/2/19 20:22
 */
public interface UserService extends IService<User> {
    int getUserTypeForApp(Long id);

    //登录
    String signIn(HttpServletRequest request, String username, String password);

    /**
     * 手机号登录
     */
    String signInByMobile(HttpServletRequest request, String mobile, String code);

    String signInByMobileForApp(HttpServletRequest request, String mobile, String code);

    List<User> getActiveUsers(List<Long> ids);

    /**
     * 查找departmentIds中职位是jobs的所有用户
     */
    List<Long> getUserIdsByDepartmentIdsAndJobs(List<Long> departmentIds, List<String> jobs);

    /**
     * 查找departmentId及其祖先部门中职位是jobs的所有用户
     */
    List<Long> getSupperUserIdsByDepartmentIdAndJobs(Long departmentId, List<String> jobs);

    /**
     * 查找departmentId.job的用户
     */
    List<Long> getUserIdsByDepartmentIdJob(List<String> departmentId_job);

    // 根据id查询管理员信息
    UserDTO findDtoById(Long id);

    // 用户设置密码
    Boolean resetPassword(Long userId, ResetPasswordDTO dto);

    // 分页
    Page<WebUserVO> selectPageList(Integer current_page, Integer page_size,
                                   String name, String username, Long role_id);


    // 配置角色
    Boolean setRole(UserSetRoleDTO dto);

    // 新增
    Boolean addOne(WebUserDTO dto);

    // 新增返回id
    Long addOneReturnId(WebUserDTO dto);

    // 编辑
    Boolean editOne(WebUserDTO dto);

    // 删除
    Boolean del(List<Long> ids);

    // 更新状态
    Boolean changeStatus(Long id, Integer status);

    // 后台用户管理重置密码
    Boolean resetPassword(Long id);

    UserVO getUserVOById(String tenantName, Long id);

    UserWX miniWXLogin(String unionId, String openId, String sessionKey);


    List<WebDepartmentForChooseVO> getDepartmentChooseList();

    User getUserByUserName(String username);

    List<User> getSubordinateUser();

    /**
     * 获取用户负责部门的ID
     *
     * @param id
     * @return
     */
    List<Long> getUserResponsibleDeptIdByBusinessHead(Long id);

    /**
     * 根据部门ID获取部门下所有用户信息（包括字部门）
     *
     * @param id
     * @return
     */
    List<User> getUserByDeptId(Long id);

    /**
     * 根据部门ID获取用户主部门是该部门的人员信息
     *
     * @param id
     * @return
     */
    List<User> getUserByUserMainDeptId(Long id);

    /**
     * 判断当前用户是否是销售人员
     * @return
     */
    Boolean is_salesperson();


    /**
     * 根据角色code查询用户
     * @param code
     * @return
     */
    List<User> list_by_role_code(String code);
}
